
/**
 * @brief    Defines data needed to perform complex eigenvalue analysis.
 *
 * @version  0.1
 * @author   wuxingchuang
 * @date     2024.11.23
 *          _
 *      ___| |__   ___ _ __   __ _  ___  _ __   __ _
 *     / __| '_ \ / _ \ '_ \ / _` |/ _ \| '_ \ / _` |
 *     \__ \ | | |  __/ | | | (_| | (_) | | | | (_| |
 *     |___/_| |_|\___|_| |_|\__, |\___/|_| |_|\__, |
 *                           |___/             |___/
 * @copyright (c) 2024 by 神工仿真, All Rights Reserved.
 */
#pragma once
#include "DataStructure/Common/Id.h"
#include "DataStructure/Common/Real.h"
#include "DataStructure/Common/SetBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN

struct EIGCData : public SetBase
{
    struct REGIONData
    {
        SG::DataStructure::Common::Real m_AAJ = 0.0;      ///<
        SG::DataStructure::Common::Real m_WAJ = 0.0;      ///<
        SG::DataStructure::Common::Real m_ABJ = 0.0;      ///<
        SG::DataStructure::Common::Real m_WBJ = 0.0;      ///<
        SG::DataStructure::Common::Real m_LJ  = 0.0;      ///<
        SG::DataStructure::Common::I64  m_NEJ = 0;        ///<
        SG::DataStructure::Common::I64  m_NDJ = 0;        ///<
    };

    char                            m_METHOD[8] = { 0 };  ///<
    char                            m_NORM[8]   = "MAX";  ///<
    SG::DataStructure::Common::I64  m_G         = 0;      ///<
    SG::DataStructure::Common::I64  m_C         = 0;      ///<
    SG::DataStructure::Common::Real m_E         = 0.0;    ///<
    SG::DataStructure::Common::I64  m_ND1       = 0;      ///<
    SG::DataStructure::Common::Id   m_domainId  = 0;      ///<

    std::vector<REGIONData> m_REGIONList;
};

///@{ @brief operator override
DECLSPEC bool operator== (const EIGCData::REGIONData& val1, const EIGCData::REGIONData& val2);

DECLSPEC bool operator== (const EIGCData& val1, const EIGCData& val2);
///}@
SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE
